perm filename ALDISP.PAL[PNT,HE] blob sn#622356 filedate 1981-11-07 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	 POINTY and AL display routines and initialization
C00005 00003		initialization routine	UPDINIT
C00009 00004		routine to print out joint value PRTW
C00014 00005		routine to read joint angles every 100 msec DOWHER
C00016 00006	LOCAL STORAGE AREA
C00020 ENDMK
C⊗;
COMMENT ⊗ POINTY and AL display routines and initialization
	⊗;
TTTTRANS==1
NNCYCLES==50.

DATA
TRNADR:	.BLKW	60
CODE

;DEVICE MECHANISM BITS

YELARM== 1	;MECHANISM BITS: YELLOW ARM, NOT INCLUDING HAND
YELHND== 2 	;YELLOW HAND
BLUARM== 4	;BLUE ARM, NOT INCLUDING HAND
BLUHND== 10	;BLUE HAND
BTABOFF==14.	;OFFSET FOR POINTERS INTO TABLES

COMMENT ⊗
	The following are the character codes for the VT05


	HOME POSITION		35	..use with fillers, e.g. 10
		Move curson to top line, first character pos
	ERASE LINE		36
		... to the end of the line from the current cursor pos
	ERASE SCREEN		37	.. use with fillers
		... to end of screen from current pos
	LINE FEED		12
		... if on last line, cause scroll
	BELL			 7
	BACKSPACE		10??	..(not delete)
	CR			15
	C(→) cursor right	30
	C(←) cursor left	10
	C(↑) curson up		32
	C(↓) cursor down(one line)13
	CAD			16	.. USE FILLER
		.. direct cursor addressing
		.. next two words(bytes?) represent
			y-addres or line location
			x-address of char location
				(except that octal 40 - 1 must be added
				if you assume that lines begin 
				at 1 instead of 0)
⊗;


HOME==35
EOL==36
EOS==37
TAB==11
CR==15
LF==12
BELL==7
BS==10
CRR==30
CRL==10
CRU==32
CRD==13
CAD==16
COFF==37
CFILL==10		;Used as filler because 0 will be treated as end of string
COMMA==',
ALHOMY==COFF+14		;Ycoord code for beginning of AL display section
JTHOMY==COFF+7		;Ycoord code for beginning of joint display line
ADHOMY==COFF+10		;Ycoord code for beginning of A-D reading display line
EUHOMY==COFF+11		;Ycoord code for beginning of euler angle display line

JTHOMX==COFF+17
EUHOMX==COFF+17
ALHOMX==COFF+1
ADHOMX==COFF+17
;	initialization routine	UPDINIT
;	
;	This routine initializes the updating by clearing the
;VT05 screen, and typing the header information and the titles
;and then starts up two jobs PRWT and DOWHER which continously print
;out and update the joint angle information
;	All registers are saved
;
UPDINIT: PUSH	<R0,R1,R2,R3,R4,R5>
	EVWAIT	CSLEVT
	MOV	#CLRSCR,R0	;GO TO TOP OF PAGE ON VT05 and clear VT05
	JSR	PC,PTYPSTR
	EVSIG	CSLEVT
	CLR	FRMDDT		;to clear from run to run
	CLR	DSPOK		;turn on display joint angles and trans angles
	CLR	UPDOK		;makes sure we will start keep doing where
	JSR	PC,DSPINIT	;INITIALISE THE DISPLAY
	SCHEDU	#DWHRPD,#DOWHER,#USRDM,#2	;SCHEDULE JOB FOR READING ARM CONTIN
	SCHEDU	#PRTWPD,#PRTW,#USRDM,#4	;SCHEDULE JOB FOR PRINTING OUT DISPLAY
	POP	<R5,R4,R3,R2,R1,R0>
	RTS	PC

DSPINIT:PUSH	<R2,R3,R4,R5>	; we will need this later
	MOV	#8.,R0		;SET FORMAT TO PRINT OUT COLUMNS WITH WIDTH = 8
	MOV	#2,R1		;AND DIGITS = 2
	JSR	PC,FORMAT
	MOV	#NNCYCLES,NCYCLES	; set ncycles=whatever it is
	CMP	VT05DSP,#1	;blue only?
	BEQ	1$
	MOV	#200$,R5	;yarm
	CLR	R4
	BR	11$
1$:	MOV	#100$,R5
	MOV	#14.,R4
11$:	MOV	LUSTPPTR,R2	;starting address of upper stop
	ADD	R4,R2
	MOV	#ULINE,R0
	MOV	#7,R3
9$:	LDF	@(R2)+,AC0
	JSR	PC,CVF
	SOB	R3,9$
	MOV	LLSTPPTR,R2	;starting address of yellow stop
	ADD	R4,R2
	MOV	#LLINE,R0
	MOV	#7,R3
8$:	LDF	@(R2)+,AC0
	JSR	PC,CVF
	SOB	R3,8$
	EVWAIT	CSLEVT		;GRAB CONSOLE
15$:	MOV	(R5)+,R4	;start printing out the list of strings
	BEQ	2$		; if null, then done
16$:	MOV	(R4)+,R0
	BEQ	15$
	JSR	PC,PTYPSTR
	BR	16$
2$:	EVSIG	CSLEVT
	POP	<R5,R4,R3,R2>
	MOV	ALHOMP,CURYXAL	;initialize position for AL display
	RTS	PC

DATA
900$:	.WORD	PNTIT,RNSTIT,CRLFEOL,0
105$:
101$:	.WORD	BLUTIT,0
205$:
201$:	.WORD	YELTIT,0
902$:	.WORD	ARMTIT,JTTIT,CRLFEOL,HITIT,STTIT
	.WORD	ULINE,CRLFEOL,LOTIT,STTIT,LLINE,CRLFEOL,PRKTIT,0
103$:	.WORD	BPRKTIT,0
203$:	.WORD	YPRKTIT,0
904$:	.WORD	CRLFEOL,CRLFEOL,0
906$:	.WORD	JNTSTIT,CRLFEOL,ADTIT,CRLFEOL
	.WORD	EUTIT,CRLFEOL,ALTIT,RNSTIT,0
100$:	.WORD	900$,101$,902$,103$,904$,105$,906$,0
200$:	.WORD	900$,201$,902$,203$,904$,205$,906$,0
VT05DSP:.WORD	1		;1=blue arm,2=yellow arm,3=both
ULINE:	.BLKW	72.
LLINE:	.BLKW	72.
CODE
;	routine to print out joint value PRTW
DATA
UPDOK:	0			; 0 if to update the reading of arm
PRTWPD:	PDBLK	1,100,FP	; SET UP PBD FOR PRINTING ROUTINE
DSPOK:	0			; FLAG TO INDICATE IF DISPLAY WANTED
DSPOKSAV:0
NCYCLES:50.			; number of cycles before redrawing the words
CODE
PRTW:	TST	ALLIVE		;TEST IF AL IS DONE
	BNE	1$
	DISMIS			;go away, AL is done
1$:	TST	DSPOK		;Test if want the display
	BEQ	2$
	SLEEP	#1000.		;No,we dont want display
	BR	PRTW		;Go check if now we want display
2$:	TST	FRMDDT		;TEST IF JUST CAME FROM DDT
	BEQ	3$
	JSR	PC,DSPINIT	;YES, SO REINITIALIZE DISPLAY
	CLR	FRMDDT		;CLEAR FROM DDT FLAG
3$:	DEC	NCYCLES		;decrement
	BGT	4$
	MOV	#50.,NCYCLES
	JSR	PC,DSPINIT
4$:	MOV	#IOBUF,R0	;START BUILDING OUTPUT STRING IN HERE
	MOV	LTHPTR,R2	;GET POINTERS JOINT READINGS
	CMP	VT05DSP,#2
	BEQ	5$		; is yellow arm
	ADD	#BTABOFF,R2	;TO GET VALUES FOR BLUE ARM
5$:	MOV	#7,R3		;7 JOINTS IN ALL
JTCLP:	LDF 	@(R2)+,AC0	;GET JOINT ANGLE
	JSR	PC,CVF		;CONVERT JOINT ANGLE TO STRING 
	SOB	R3,JTCLP
	CLRB	(R0)+		;END OF INFO
	EVWAIT	CSLEVT
	MOV	#JTHOME,R0
	JSR	PC,PTYPSTR	;JUMP TO LINE TO PRINT CURRENT VALUES
	MOV	#IOBUF,R0
	JSR	PC,PTYPSTR	;TYPE OUT WHOLE STRING
	EVSIG	CSLEVT
	MOV	#9.,R0		;CHANGE STRING FORMAT FOR INTEGER NUMBER
	CLR	R1
	JSR	PC,FORMAT
	MOV	#IOBUF,R0	;START BUILDING OUT STRING AGAIN
	MOV	LPOTPTR,R2	;GET POINTERS TO POTS
	CMP	VT05DSP,#2	; is it yellow or blue?
	BEQ	1$		; it is yellow
	ADD	#BTABOFF,R2	;TO GET FOR BLUE ARM
1$:	MOV	#7,R3		;CONVERT THE ACTUAL POT READINGS
NEXTP:	LDCIF	@(R2),AC0	;GET A/D READING
	TST	@(R2)+		;CHECK IF ROUND UP OR DOWN
	BLT	RNDDN
	ADDF	#40000,AC0	;ROUND OFF READING
	BR	.+6
RNDDN:	SUBF	#40000,AC0
	JSR	PC,CVF		;CONVERT TO ASC
	SOB	R3,NEXTP
	JSR	PC,RSTFOR	;RESET THE FORMAT
	CLRB	(R0)		;PUT IN EMPTY BYTE
	EVWAIT	CSLEVT
	MOV	#ADHOME,R0
	JSR	PC,PTYPSTR	;JUMP TO LINE TO PRINT CURRENT VALUES
	MOV	#IOBUF,R0
	JSR	PC,PTYPSTR	;TYPE OUT WHOLE STRING
	EVSIG	CSLEVT
	MOV	#TRNADR,R0	;GET CURRENT TRANSFORM IN HERE
	MOV	LTHPTR,R1	;POINT TO THE CURRENT JOINT ANGLES
	MOV	#BLUARM,R2	;USE SOLUTION FOR BLUE ARM
	JSR	PC,@LUPDATE	;COMPUTE THE CURRENT TRANSFORM
	MOV	#TRNADR,R0	;COMPUTE THE EULER ANGLES
	MOV	#EANGLE,R1	;PUT THEM IN HERE
	JSR	PC,@LEULER
	MOV	#IOBUF,R0	;CONVERT TO STRING FOR OUTPUT
	MOV	#6,R3
	MOV	#EANGLE,R2
EANGC:	LDF	(R2)+,AC0
	JSR	PC,CVF
	SOB	R3,EANGC	;REPEAT TILL DONE
	CLRB	(R0)
	EVWAIT	CSLEVT
	MOV	#EUHOME,R0
	JSR	PC,PTYPSTR	;GET TO RIGHT PLACE
	MOV	#IOBUF,R0
	JSR	PC,PTYPSTR	;TYPE OUT THE EULER ANGLES
	EVSIG	CSLEVT
	SLEEP	#150.		;SLEEP 150 MSEC TO GIVE AL INTERPRETER A CHANCE
	JMP	PRTW
;	routine to read joint angles every 100 msec DOWHER
DATA
DWHRPD:	PDBLK	2,100,FP	; SET UP PBD FOR PROCESS THAT LOOKS AT ARM POSITION
CODE
				; EVERY 50 MSEC
DOWHER:	MOV	#BARMSB+BHANDSB,WLST	;DO A WHERE FOR THE BLUE ARM
       	MOV	#WLST,R0
	MOV	#DEVICE,R1
	TST	UPDOK
	BNE	1$
	JSR	PC,@LWHERE	;READ THE JOINT POSITIONS
	MOV	#YARMSB+YHANDSB,WLST	;DO A WHERE FOR THE YELLOW ARM
       	MOV	#WLST,R0
	MOV	#DEVICE,R1
	TST	UPDOK
	BNE	1$
	JSR	PC,@LWHERE	;READ THE JOINT POSITIONS
2$:	TST	ALLIVE		;TEST IF AL PROGRAM FINISHED
	BNE	1$
	DISMIS
1$:	SLEEP	#100.		; GO TO SLEEP FOR 100 MSECS
	TST	UPDOK
	BNE	2$		; arm is moving dont do a where
	BR	DOWHER
;LOCAL STORAGE AREA
DATA
DEVICE:	.BLKW	33	;DEVICE BLOCK FOR WHERE
IOBUF:	.BLKW	400.	;OUTPUT STRING BUFFER
EANGLE:	.BLKW	12.	;EULER ANGLES STORED HERE
WLST:	374    		;JOINT SERVO BIT
	0

;OUTPUT STRINGS
		; TOP OF VT05 SCREEN
CLRSCR:	.BYTE	HOME,CFILL,CFILL,CFILL,EOS,CFILL,CFILL,CFILL,0,0
PNTIT:	.BYTE	HOME,CFILL,CFILL,CFILL,EOL
	.ASCIZ	/	       P O I N T Y/
RNSTIT:	.ASCIZ	/   R U N T I M E   S Y S T E M/
JTTIT:	.ASCIZ	\	JT1 /X  JT2 /Y  JT3 /Z  JT4 /O  JT5 /A  JT6 /T     HAND\
HITIT:	.ASCIZ	/HIGH /
LOTIT:	.ASCIZ	/LOW  /
STTIT:	.ASCIZ	/STOPS    /
PRKTIT:	.ASCIZ	/PARK POSITION  /
BPRKTIT:.ASCIZ	/ 180.00  -90.00   14.00  -90.00   90.00    0.00/
YPRKTIT:.ASCIZ	/-180.00   90.00   14.00  -90.00   90.00   90.00/
CRPTIT:	.ASCIZ	/CURRENT POS/
ADTIT:	.ASCIZ	/A-D READINGS/
EUTIT:  .ASCIZ  /EULER ANGLES/
ALTIT:	.ASCIZ	/		   A L/
BLUTIT:	.ASCIZ	/BLUE /
YELTIT:	.ASCIZ	/YELLOW /
ARMTIT:	.ASCIZ	/ARM/
JNTSTIT:.ASCIZ	/JOINTS/
CRLFEOL:.BYTE	CR,LF,EOL,0
	.EVEN
ALHOMP:	.BYTE	ALHOMY,ALHOMX
JTHOME:	.BYTE	CAD,JTHOMY,JTHOMX,0
ADHOME:	.BYTE	CAD,ADHOMY,ADHOMX,0
EUHOME:	.BYTE	CAD,EUHOMY,EUHOMX,0
	.EVEN
CODE